package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import modelo.ModeloCompra;
import modelo.ModeloDetalleCompra;
import modelo.ModeloIngredientes;
//import modelo.ModeloProductos;

import vista.VistaCompra;

import Utilidades.ObjetoCombo;

public class ControladorCompra  extends WindowAdapter implements ActionListener, WindowListener {

	private VistaCompra vista;
	//private ModeloProductos modeloproducto;
	private ModeloCompra modelocompra;
	private ModeloIngredientes modeloingrediente;
	
	private int fila = 0;
	
	public  void Limpiar(){
		
		fila=0;
		vista.getTxtCodigo().setText("");
		vista.getTxtDescripcion().setText("");
		vista.getTxtTotal().setText("");		
		vista.getTxtcantidad().setText("");		
		vista.getTxtIngredientes().setSelectedItem(null);
		
		for(int i=0; i<vista.getTabla().getRowCount(); i++)
			for(int f=0; f<3; f++)
				vista.getTabla().setValueAt("", i, f);
		
	}
	
	public  void limpiar2(){
		fila=0;
		vista.getTxtDescripcion().setText("");
		vista.getTxtTotal().setText("");		
		vista.getTxtcantidad().setText("");
		vista.getTxtIngredientes().setSelectedItem(null);
		
		for(int i=0; i<vista.getTabla().getRowCount(); i++)
			for(int f=0; f<4; f++)
				vista.getTabla().setValueAt("", i, f);
		
	}
	
	public ControladorCompra(VistaCompra vista){
		
		super();
		this.vista= vista;
		//this.modeloproducto = new ModeloProductos();
		this.modelocompra = new ModeloCompra();
		this.modeloingrediente = new ModeloIngredientes();
		
	}
	
	
	public void windowClosing(WindowEvent e){
		vista.dispose();
	}
	
	public void windowOpened(WindowEvent arg0) {
		//System.out.println("entro a cargar");
		cargarIngredientes();
		vista.getTxtIngredientes().setSelectedItem(null);
	}

	
	
	public void mostrarInfo(ModeloCompra compra){
		
		limpiar2();
		vista.getTxtCodigo().setText(compra.getId());
		vista.getTxtDescripcion().setText(compra.getDescripcion());
		vista.getTxtTotal().setText(Double.toString(compra.getTotal()));		
						
		for (int i=0;i<compra.getVDetalle().size();i++){
			
				
				vista.getTabla().setValueAt(compra.getVDetalle().elementAt(i).getId_ingrediente(), i, 0);
				
				ModeloIngredientes ingre = modeloingrediente.existe(compra.getVDetalle().elementAt(i).getId_ingrediente());
				
				vista.getTabla().setValueAt(ingre.getDescripcion(), i, 1);
				vista.getTabla().setValueAt(Integer.toString(compra.getVDetalle().elementAt(i).getCantidad()), i, 2);
				
				fila++;
			}
		
	}
	


	public void cargarIngredientes(){
		
		ResultSet rs;
		
		
		rs = modeloingrediente.listar();
		
		try {
            
			while (rs.next()){
				
				ObjetoCombo objetoCombo = new ObjetoCombo(rs.getString("id"),rs.getString("descripcion"));
				vista.getTxtIngredientes().addItem(objetoCombo);
			}
			
		} catch (SQLException e) {
		
			e.printStackTrace();
		}

	}

	public void actionPerformed(ActionEvent ae) {
	
		//String mensaje;
		ModeloCompra encontrado = null;
		
		//int tipoMensaje=0;
		// BUSCAR
			if(ae.getActionCommand().equalsIgnoreCase(vista.getBtnBuscar().getText())){
				buscar(encontrado);
				
			}
		
		//guardar
		
		if(ae.getActionCommand().equalsIgnoreCase(vista.getBtnGuardar().getText())){
			
			guardar(encontrado);
					
		}
			
		if (ae.getActionCommand().equalsIgnoreCase(vista.getBtnCancelar().getText())){
				Limpiar();
		}
		
		if (ae.getActionCommand().equalsIgnoreCase(vista.getBtnModificar().getText())){
			
			modificar(encontrado);
		}
		
		
		
		if (ae.getActionCommand().equalsIgnoreCase(vista.getBtnIncluir().getText())){
			incluirIngrediente();
		}
		
		if (ae.getActionCommand().equalsIgnoreCase(vista.getBtnSalir().getText())){
			vista.dispose();
		}
		
		if (ae.getActionCommand().equalsIgnoreCase(vista.getBtnFila().getText())){
			
			eliminarFila();
			
		}
		
		//ELIMINAR
		if (ae.getActionCommand().equalsIgnoreCase(vista.getBtnEliminar().getText())){
			
			eliminar();
		}
		
	}
	
	public void eliminarFila()
	{
		fila--;
		int filaE=vista.getTabla().getSelectedRow();
		vista.getTxtEFila().setText(Integer.toString(filaE));
		vista.getTabla().setValueAt("", filaE,0);
		vista.getTabla().setValueAt("", filaE,1);
		vista.getTabla().setValueAt("", filaE,2);
		
		int filaAux;
		for(int i=filaE; i<vista.getTabla().getRowCount();i++)
		{
			filaAux=i+1;
			if (filaAux< vista.getTabla().getRowCount()){
			
				if(vista.getTabla().getValueAt(filaAux,2)!="")
				{
					vista.getTabla().setValueAt(vista.getTabla().getValueAt(filaAux, 0),i,0);
					vista.getTabla().setValueAt(vista.getTabla().getValueAt(filaAux, 1),i,1);
					vista.getTabla().setValueAt(vista.getTabla().getValueAt(filaAux, 2),i,2);
				
				}else{
					vista.getTabla().setValueAt("",i,0);
					vista.getTabla().setValueAt("",i,1);
					vista.getTabla().setValueAt("",i,2);
				}
			}
		}
		
	}
	
	private void buscar(ModeloCompra encontrado)
	{
		encontrado = modelocompra.buscarCompra(vista.getTxtCodigo().getText());
		String mensaje;
		int tipoMensaje;
		
		if (encontrado == null)
		{
			mensaje = "No se econtro el codigo";
			tipoMensaje = JOptionPane.INFORMATION_MESSAGE;
			JOptionPane.showMessageDialog(new JPanel(), mensaje,"Sistema la <<Guapa>>    Comida Rapida",
					  tipoMensaje);
			Limpiar();
			
		}else
		{
			
			mostrarInfo(encontrado);
			
		}
	}
	
	
	private void llenarVector(Vector<ModeloDetalleCompra> vDetalle){
		
	int fila=vista.getTabla().getRowCount();
	
	for (int i=0;i<fila;i++){
		
			if(vista.getTabla().getValueAt(i,1).toString() != ""){
			
				//vista.getTabla().setValueAt(vista.getTxtCodigo().getText(), i, 0);
				
				String datopro = vista.getTxtCodigo().getText();
				String datoing = vista.getTabla().getValueAt(i,0).toString();
				int cant = Integer.parseInt(vista.getTabla().getValueAt(i,2).toString());
				
				ModeloDetalleCompra actual = new ModeloDetalleCompra (datopro, cant, datoing);
				vDetalle.addElement(actual);
				
			}
		}
		
		
	}
	
	
	
	public void guardar(ModeloCompra encontrado)
	{
		
		int tipoMensaje=0;
		String mensaje="";
		
		@SuppressWarnings({ "rawtypes", "unchecked" })
		Vector<ModeloDetalleCompra> vDetalle = new Vector();				
		llenarVector(vDetalle);
		
		if(vDetalle.size()>0)
		{
			ModeloCompra encontrada;		
			modelocompra = new ModeloCompra(vista.getTxtCodigo().getText(), vista.getTxtDescripcion().getText(), Double.parseDouble(vista.getTxtTotal().getText()), vDetalle);
			
				encontrada = modelocompra.existe(modelocompra.getId());
								
				if (encontrada == null){
					
					modelocompra.registar(modelocompra);
					mensaje="Compra ingresado exitosamente";
					tipoMensaje = JOptionPane.INFORMATION_MESSAGE;
					JOptionPane.showMessageDialog(new JPanel(), mensaje,"Sistema <<La Guapa>>    Comida Rapida",tipoMensaje);
					//Limpiar();
				
				}else{
					
					mensaje = "La compra que esta intentando ingresar ya se encuentra registrada";
					tipoMensaje = JOptionPane.WARNING_MESSAGE;
					JOptionPane.showMessageDialog(new JPanel(), mensaje,"Sistema <<La Guapa>>    Comida Rapida",tipoMensaje);
				}
		}
		else
		{
			mensaje = "Debe ingresar al menos un ingrediente";
			tipoMensaje = JOptionPane.WARNING_MESSAGE;
			JOptionPane.showMessageDialog(new JPanel(), mensaje,"Sistema <<La Guapa>>    Comida Rapida",tipoMensaje);
		}
			
	}
	
	
	private void modificar(ModeloCompra encontrado){
		
		String mensaje;
		int tipoMensaje;
		@SuppressWarnings({ "rawtypes", "unchecked" })
		Vector<ModeloDetalleCompra> vDetalle = new Vector();
		
		modelocompra.setId(vista.getTxtCodigo().getText());
		modelocompra.setDescripcion(vista.getTxtDescripcion().getText());		
		modelocompra.setTotal(Double.parseDouble(vista.getTxtTotal().getText()));
		llenarVector(vDetalle);
		
		//ModeloProductos actual = new ModeloProductos (vista.getTxtCodigo().getText(), vista.getTxtDescripcion().getText(), Double.parseDouble(vista.getTxtPrecio().getText()), Double.parseDouble(vista.getTxtCosto().getText()),objetoCombo.getCodigo());
		
//		modelocompra = new ModeloCompra(vista.getTxtCodigo().getText(), vista.getTxtDescripcion().getText(), Double.parseDouble(vista.getTxtTotal().getText()), vDetalle);
		
		
		ModeloCompra encontrada= modelocompra.existe(modelocompra.getId());
		
		if (encontrada == null){
			
			mensaje = "Error: compra no modificada";
			tipoMensaje = JOptionPane.WARNING_MESSAGE;
			Limpiar();					

		}else{
		
			modelocompra.modificar();
			mensaje="Compra Modificada";
			tipoMensaje= JOptionPane.INFORMATION_MESSAGE;
			JOptionPane.showMessageDialog(new JPanel(),mensaje,"Sistema <<La Guapa>>    Comida Rapida",	tipoMensaje);
			Limpiar();
		}
		
	}
	
	private void incluirIngrediente(){
		
		if (vista.getTxtIngredientes().getSelectedItem()!=null){
			
				if (!vista.getTxtcantidad().getText().trim().equals("")){
					
					if (Integer.parseInt(vista.getTxtcantidad().getText()) > 0){
						
						ObjetoCombo oC = (ObjetoCombo) vista.getTxtIngredientes().getSelectedItem();		
						vista.getTabla().setValueAt(oC.getCodigo(), fila, 0);
						vista.getTabla().setValueAt(oC.getNombre(), fila, 1);
						vista.getTabla().setValueAt(vista.getTxtcantidad().getText(), fila, 2);
						fila++;
					
					}else {
						
						String mensaje="Disculpe, inserte una cantidad mayor a cero (0)";
						int tipoMensaje= JOptionPane.INFORMATION_MESSAGE;
						JOptionPane.showMessageDialog(new JPanel(),mensaje,"Sistema <<La Guapa>>    Comida Rapida",	tipoMensaje);
					}
					
				}else {
					
					String mensaje="Disculpe, inserte una cantidad mayor a cero (0)";
					int tipoMensaje= JOptionPane.INFORMATION_MESSAGE;
					JOptionPane.showMessageDialog(new JPanel(),mensaje,"Sistema <<La Guapa>>    Comida Rapida",	tipoMensaje);
				}
		}else {
			
			String mensaje="Disculpe, debe seleccionar un ingrediente";
			int tipoMensaje= JOptionPane.INFORMATION_MESSAGE;
			JOptionPane.showMessageDialog(new JPanel(),mensaje,"Sistema <<La Guapa>>    Comida Rapida",	tipoMensaje);
		}
	}
	
	private void eliminar()	
	{
		String mensaje="";
		int tipoMensaje;
		
		modelocompra.setId(vista.getTxtCodigo().getText());
		modelocompra.setDescripcion(vista.getTxtDescripcion().getText());	
		modelocompra.setTotal(Double.parseDouble(vista.getTxtTotal().getText()));
		
		ModeloCompra actual = new ModeloCompra (vista.getTxtCodigo().getText(), vista.getTxtDescripcion().getText(), Double.parseDouble(vista.getTxtTotal().getText()));		
		ModeloCompra encontrada=modelocompra.existe(actual.getId());
		
		if (encontrada == null){
			mensaje = "Error: Compra no Eliminada";
			tipoMensaje = JOptionPane.WARNING_MESSAGE;
			Limpiar();					

		}else{
			modelocompra.eliminar();
			mensaje="Registro Eliminado";
			tipoMensaje= JOptionPane.INFORMATION_MESSAGE;
			JOptionPane.showMessageDialog(new JPanel(),mensaje,"Sistema <<La Guapa>>    Comida Rapida",	tipoMensaje);
			Limpiar();
		}
	}
	
}
